#pragma once

namespace CurrentThread
{
    // 获取tid是系统调用效率不高，缓存起来
    // 全局变量，但每个线程都有一份拷贝存储不同tid
    // OPTIMIZE: __thread -> thread_local
    // extern __thread int t_cachedTid;
    extern thread_local int cacheTid;

    void getCacheTid();

    inline int tid() // 内联函数只在当前文件中起作用
    {
        // GCC内置函数 __builtin_expect 用于告诉编译器某个条件分支的预期值。
        // 第一个参数 exp 是要评估的表达式。
        // 第二个参数 c 是预期的值。
        // 如果 exp 的值等于 c，则表示这个分支更有可能被执行。
        // 表示预期 cacheTid == 0 的结果为 0（即 cacheTid != 0）。
        // 这意味着编译器会假设 cacheTid 通常不等于 0
        // 因此 if 分支（cacheTid()）较少被执行。
        if (__builtin_expect(cacheTid == 0, 0))
        {
            getCacheTid();
        }
        return cacheTid;
    }
}